/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package rmi;

/**
 *
 * @author Cédric
 */

//Imports para que el Almacen actúe como cliente RMI.
import java.net.MalformedURLException;
import java.rmi.*;
import java.util.logging.Level;
import java.util.logging.Logger;
//import aso.upna.cancion.*;
import java.io.File;
import java.io.Serializable;
import javax.naming.NamingException;
//import System.Runtime.Remoting.RemotingException;
import java.lang.System.*;
import java.util.Vector;


public class ClientRMI implements Serializable{

    String usuario,contr;

    public ClientRMI(){
    }

    public ClientRMI(String usuario,String contr){
        this.usuario=usuario;
        this.contr=contr;
    }

    public String getUsuario (){
        return usuario;
    }

    public String[] fragmenta_fich(String filename){

        String[] nombres = new String[2];

        System.out.println("\nORIGINAL: "+filename);
        int posicion = filename.indexOf("-");
        String carpeta = filename.substring(0,posicion-1);
        nombres[0] = carpeta;
        String nom_let = filename.substring(posicion+2);
        nombres[1] = nom_let;
        System.out.println("\tCARPETA: "+nombres[0]);
        System.out.println("\tFICHERO LETRAS: "+nombres[1]+"\n");
        //filename.replace(".txt","");

        return nombres;
   }

    /*
     * El almacén de datos sin procesar es el que es cliente
     * de la clase que suministra los metadatos
     *
     * Ahora tenemos que leer el objecto que nos han mandado.
     * Opciones
     * A)Leer el objeto que nos han mandado entero.
     * B)Que nos hayan pasado la información que necesitamos a base de Strings.
     */
    public Vector MetadatosRemoto(String ip,int port,String tipo,String filename)throws NamingException{
        String[] datos_rec=new String[5];
        String ruta;
        String[] nom_fich;
        Vector x = null;
        String[] nom = new String[2];

        //ProcessFile pf=new ProcessFile(getFilename());
        //ProcessFile pf2=new ProcessFile("Prueba.txt");
        if (tipo.equals("Letras")){
            try {
                Inter ser = (Inter) Naming.lookup("rmi://"+ip+":"+port+"/reg");
                nom = fragmenta_fich(filename);

                x = ser.read(new File("/Volumes/CHIVOX/Users/chivo/Almacenes/Metadatos/"+nom[0]+"/Letras/"+nom[1]+".txt"));
                //x = ser.read(new File("/home/eneko/Escritorio/Queen-The show must go on.txt"));

            } catch (NotBoundException ex) {
                Logger.getLogger(ClientRMI.class.getName()).log(Level.SEVERE, null, ex);
            } catch (MalformedURLException ex) {
                Logger.getLogger(ClientRMI.class.getName()).log(Level.SEVERE, null, ex);
            } catch (RemoteException ex) {
                Logger.getLogger(ClientRMI.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        else if (tipo.equals("Videos")){
            try {
                Inter ser = (Inter) Naming.lookup("rmi://"+ip+":"+port+"/reg");

                x = ser.read(new File("/Volumes/CHIVOX/Users/chivo/Almacenes/Metadatos/"+filename+"/"+filename+"_video.txt"));
                //x = ser.read(new File("/home/eneko/Escritorio/Queen-The show must go on.txt"));

            } catch (NotBoundException ex) {
                Logger.getLogger(ClientRMI.class.getName()).log(Level.SEVERE, null, ex);
            } catch (MalformedURLException ex) {
                Logger.getLogger(ClientRMI.class.getName()).log(Level.SEVERE, null, ex);
            } catch (RemoteException ex) {
                Logger.getLogger(ClientRMI.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        else if (tipo.equals("Videos_rel")){
            try {
                Inter ser = (Inter) Naming.lookup("rmi://"+ip+":"+port+"/reg");

                x = ser.read(new File("/Volumes/CHIVOX/Users/chivo/Almacenes/Metadatos/"+filename+"/"+filename+"_related_video.txt"));
                //x = ser.read(new File("/home/eneko/Escritorio/Queen-The show must go on.txt"));

            } catch (NotBoundException ex) {
                Logger.getLogger(ClientRMI.class.getName()).log(Level.SEVERE, null, ex);
            } catch (MalformedURLException ex) {
                Logger.getLogger(ClientRMI.class.getName()).log(Level.SEVERE, null, ex);
            } catch (RemoteException ex) {
                Logger.getLogger(ClientRMI.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        else if (tipo.equals("Imagenes")){
            try {
                Inter ser = (Inter) Naming.lookup("rmi://"+ip+":"+port+"/reg");

                x = ser.read(new File("/Volumes/CHIVOX/Users/chivo/Almacenes/Metadatos/"+filename+"/"+filename+"_img.txt"));

            } catch (NotBoundException ex) {
                Logger.getLogger(ClientRMI.class.getName()).log(Level.SEVERE, null, ex);
            } catch (MalformedURLException ex) {
                Logger.getLogger(ClientRMI.class.getName()).log(Level.SEVERE, null, ex);
            } catch (RemoteException ex) {
                Logger.getLogger(ClientRMI.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return x;

    }

    public void PerfilesRemoto(String ip,int port)throws NamingException{
        //String[] datos_rec=new String[5];
        String ruta="";
        //String[] nom_fich;

        try {
            Inter ser = (Inter) Naming.lookup("rmi://"+ip+":"+port+"/reg");

            ruta="/Volumes/CHIVOX/Users/chivo/Almacenes/Perfiles/";
            ser.CreaDirectorios(ruta+usuario+"/Playlist/");

            ser.CreaFichero(ruta+usuario+"/pass.pwd");
            ser.write(ruta+usuario+"/pass.pwd",contr);

            System.out.println("DATOS RECIBIDOS!");

        } catch (NotBoundException ex) {
            Logger.getLogger(ClientRMI.class.getName()).log(Level.SEVERE, null, ex);
        } catch (MalformedURLException ex) {
            Logger.getLogger(ClientRMI.class.getName()).log(Level.SEVERE, null, ex);
        } catch (RemoteException ex) {
            Logger.getLogger(ClientRMI.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
 }

/*
    public static void main(String s[]) throws NamingException{
        AlmacenMetadatos alsp=new AlmacenMetadatos();
        alsp.execRemote("192.168.1.2",1085);
        
    }*/

